package _1_goodfirst;

public class _3_BasalStatement
{
	public static void main(String[]args)
	{
		{
			/*if条件语句
			 * if(判断条件){执行语句}
			 * else if(判断条件){执行语句}
			 * 如果有多个判断条件都满足，那么只会执行第一个满足条件的情况
			 * if(判断条件){}判断结果为布尔值，而()中的内容也可以直接写入布尔值,ture则执行
			 * */
			int a = 60;
			if
			(a >=60 & a < 75)//这里不能加;	不然if语句在这里就终止了
			{System.out.print("您这次考试成绩评价为C等级");}
			else if(a >= 75 & a < 90)
			{System.out.print("您这次考试成绩评价为B等级");}
			else if(a >= 90 & a <= 100) 
			{System.out.print("您这次考试成绩评价为A等级");}
			else if(a < 60)
			{System.out.print("您这次考试成绩评价为D等级");}
			else {System.out.println("系统错误");}
			System.out.println("，请继续努力！");
			System.out.println("-------------------------------------");
			//其实可以简化,if语句只执行一种情况，如果有多个情况都满足条件，那么执行最先读到的那个满足条件的情况
			int b = 72;
			if(b > 90) {
			    System.out.print("您这次考试成绩评价为A等级");
			}else if(b > 80) {
			    System.out.print("您这次考试成绩评价为B等级");
			}else if(b > 70){
			    System.out.print("您这次考试成绩评价为C等级");
			}else if(b > 60){
			    System.out.print("您这次考试成绩评价为D等级");
			}
			System.out.println("，请继续努力！");
			//如果if只有一个语句，可以不加{}
			if(a == 60)System.out.println("牛B");
			//补充：如果没有满足条件的情况，则该所有情况都不执行，不会报错
			System.out.println("-------------------if条件语句------------------");
		}
		{
			/*三元运算符
			 * 格式：判断条件? 表达式1 : 表达式2
			 * 如果判断条件结果为true，则使用表达式1的值，如果为false，则使用表达式2的值 */
			int a = 10;
			int b = 5;
			int big;
			big = a > b? b : a;
			System.out.println(big);
			//嵌套
			int c;
			c = a > b? a : b <= a? ++a: b;
			System.out.println(c);
			System.out.println("----------------三元运算符-------------------");
		}
		{
			/*switch语句
			 * switch(表达式){
			 *       case 值1:
			 *           语句体1
			 *           break;
			 *       case 值2:
			 *           语句体2
			 *           break;
			 *       default:
			 *           语句体n
			 *           break;
			 * }
			 */
			int week= 1;
			switch(week) 
			{
				case 1:
					System.out.println("今天是星期一");
					break;
				case 2:
					System.out.println("今天是星期二");
					break;
				case 3:
					System.out.println("今天是星期三");
					break;
				case 4:
					System.out.println("今天是星期四");
					break;
				case 5:
					System.out.println("今天是星期五");
					break;
				case 6:
					System.out.println("今天是星期六");
					break;
				case 7:
					System.out.println("今天是星期天");
				default:
					System.out.println("星期的数字有误");
					break;
			}
				System.out.println("-------------------1-------------------");
				 /* 1.switch语句会从上到下检索case，直到检索到与事实相符的case
				  * 2.执行该case下的语句
				  * 3.接着执行剩下其它case下的语句，即使剩下的其它case都不符合事实。这一特性称为case的穿透性
				  * 4.由于case的穿透性，switch语句常配合break语句使用，为了使switch语句停止执行
				 */
				week = 1;
			switch(week) 
			{
				case 1:
				    System.out.println("今天是星期一");
					//break;
				case 2:
					System.out.println("今天是星期二");
					break;
				case 3:
					System.out.println("今天是星期三");
					break;
				case 4:
					System.out.println("今天是星期四");
					break;
				case 5:
					System.out.println("今天是星期五");
					break;
				case 6:
					System.out.println("今天是星期六");
					break;
				case 7:
					System.out.println("今天是星期天");
				default:
					System.out.println("星期的数字有误");
					break;
			}
			System.out.println("-------------------2-------------------");
			//验证检索从上往下，以及验证要检索到符合事实的case才会开始执行，并接着执行剩下的case
			int Week = 6;
			switch(Week) 
			{
				case 1:
					System.out.println("今天是星期一");
					break;
				case 6:
                    System.out.println("今天是星期六");
                    //break;
				case 3:
					System.out.println("今天是星期三");
					//break;
				case 4:
					System.out.println("今天是星期四");
					break;
				case 5:
					System.out.println("今天是星期五");
					break;
				case 2:
                    System.out.println("今天是星期二");
                    break;
				case 7:
					System.out.println("今天是星期天");
				default:
					System.out.println("星期的数字有误");
					break;
			}
			System.out.println("------------------3--------------------");
			//利用case穿透效果，实现下面简便操作
			int weeK = 10;
			switch(weeK)
			{
				case 1:
				case 2:
				case 3:
				case 4:
				case 5:
					System.out.println("今天是工作日");
					break;
				case 6:
				case 7:
					System.out.println("今天是休息日");
					break;
				default:
					System.out.println("星期数字有误");
			}
			System.out.println("------------------------switch条件语句-----------------------");
		}
		{
			/*while循环语句
			 * while(循环条件){执行语句;}，只要条件满足，就会不断进入循环，不断执行。（可以//下面的x++试试）
			 * */
			int x = 1;
			while(x <= 4)
			{
				System.out.println("x = "+ x);
				x++;
			}
			System.out.println("-------------------------------------------");
			//补充
			int a = 1;
            while(a-- >= 0) {
               System.out.println(a);
            }
            /*执行到上一行结果为：
              0
              -1
            */
            System.out.println(a);  // 这里却输出了-2
            /*这说明最后一次循环还执行了一次a--，而a由于不合条件没有被打印出来。
            这是读码易错的地方，a都等于-1了，以为不符合就不会再执行条件语句。其实计算机要先执行条件语
            句才知道不符合*/
            //补充：当循环体中只有一条执行语句时，{}可以省略
			System.out.println("----------------------while循环语句---------------------");
		}
		{
			/*do...while循环语句
			 * do{执行语句}
			 * while(循环条件);
			 * 与while作用基本相同，特点是无论是否满足循环条件都会先执行一次do
			 * */
			int x = 5;
			do 
			{
				System.out.println("x = "+ x);
				x++;
			}
			while(x <=4);
			System.out.println("------------------do...while循环语句----------------------");
		}
		{
			/*for循环语句
			 * for(初始化语句;循环条件;操作表达式)
			 * {循环体执行语句;}
			 * 1.执行初始化语句，只执行一次
			 * 2.执行循环条件，判断是否为true
			 * 3.为true，则执行循环体中的执行语句
			 * 4.执行操作表达式
			 * 5.回到2.直到判断结果为false结束循环
			 * 
			 * 需求：
			 * 1.利用for循环求1、2、3、4之和
			 * */
			int sum = 0;
			for(int x = 1; x <= 4; x++)
			{sum += x;}
			System.out.println(sum);
			System.out.println("--------------------for循环语句---------------------");
		}
		{
			//循环嵌套
			/*for循环嵌套
			 * 执行特点：外部循环执行一次，外部循环执行一圈。
			 */
			for(int i = 1; i <= 3; i++) 
			{
				System.out.println("外层循环 i = "+i);
				for(int j = 5; j <=7; j++) 
				{
					System.out.println("内层循环 j = "+j);
				}
			}
			for(int i = 1; i <= 9; i++) 
			{
				for(int j = 1; j <= i; j++)
				{System.out.print("*");}
				System.out.println();		
			}
			System.out.println("----------------------for循环嵌套----------------------");
		}
		{
			/*break在switch条件语句和循环语句中都可使用，在switch语句中用于终止某个case，并跳出switch结构
			 * 在循环语句中用来跳出循环语句，执行循环后面的代码*/
			for(int i = 1; i <= 9; i++)
			{
				for(int j = 1; j <= i; j++) 
				{
					if(i > 4) 
					{break;}
					System.out.print("*");
				}
				System.out.println();
			}
			//比较上下几行代码
			w:for(int i = 1; i <= 9; i++) 
			{
				for(int j = 1; j <= i; j++) 
				{
					if(i > 4) 
					{
					    break w;  //continue也能这么用
					}
					System.out.print("*");
				}
				System.out.println();
			}
			System.out.println("----------------------break------------------------");
		}
		{
			//continue，用于循环语句，终止本次for循环，执行下一次循环
			//1~100中奇数相加
			int sum = 0;
			for(int i = 1; i <= 100; i++)
			{
				//除去偶数
				if(i % 2 == 0) 
				{continue;}//如果用break，则会跳出for循环，不再循环
				sum += i;
			}
			System.out.println(sum);
			System.out.println("------------------------continue------------------------");
		}
		{	
			//作业1，打印乘法口诀表
			for(int x = 1; x <= 9; x++) 
			{
				for(int y = 1; y <= x; y++) 
				{
					int muti = x * y;
					System.out.print(x + " * " + y +" = " + muti + "  ");
					if(muti < 10){
	                    System.out.print(" ");
	                }
				}
				System.out.println("");
			}
			System.out.println("----------------------------------");
			//做法二，利用\t
			//\t是制表符，相当于8个空格：前面的输出内容位数是8的倍数，输出8个空格，不足8位，补足8位
			/*另外，tab键也是相同的道理，Java规范设置一个tab缩进为个四个空格。设置好的tab键按一下会根据
			 * 前面的内容位数做出调整，前面的内容位数是4的倍数，输出4个空格，不足4位，补足4位*/
			for(int x = 1; x <= 9; x++) {
                for(int y = 1; y <= x; y++) {
                    int muti = x * y;
                    System.out.print(y + " * " + x +" = " + muti + "\t");
                }
                System.out.println("");
            }
		}
		{
			//作业2，求一百以内的素数;
			for(int x = 1; x <= 100; x++) 
			{
				boolean z = false;
				if(x == 1)
				{System.out.println(x);}
				/*else if(x == 2)
				{System.out.println(x);}*/
				else 
				{
					for(int y = 2; y < x; y++)
					{
						z = (x % y == 0) || z;
					}
					if(z == false) 
					{System.out.println(x);}
					else if(z == true)
					{System.out.println(x + "为非素数");}
					else 
					{System.out.println("error");}
				}
			}
		}
		{
			//作业3，求1! + 2! + 3! + ... + 10!的值
			int sum = 0;  
			int z = 1;
			for(int x = 1; x <= 10 ; x++) 
			{
				for(int y = 1; y <= x; y++) 
				{
					z = y * z;
				}
				sum = z + sum;
				z = 1;
			}
			System.out.println(sum);
		}
		{
		    /*作业4：打印如下图像 
                    |   A
                    |  AAA
                    | AAAAA
                    |A     A*/
		    
		    for(int i = 1; i <= 3; i++){
                for(int j = 3; j > 0; j = j - i){
                    System.out.print(" ");
                }
                for(int x = 1; x <= 2*i - 1; x ++){
                    System.out.print("A");
                }
                System.out.println();
             }
             System.out.println("A     A");

		}
	}
}
	
  